package models;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.OneToMany;

import play.data.validation.Required;
import play.db.jpa.Model;

@Entity
public class ComidaDieta extends Model {
    
	@Enumerated(EnumType.STRING)
	@Required
	private TipoComida tipo;
	
	@OneToMany(cascade=CascadeType.ALL)
	private List<Ingerido> ingeridos = new ArrayList<Ingerido>();
	
	public TipoComida getTipo() {
		return tipo;
	}

	public void setTipo(TipoComida tipo) {
		this.tipo = tipo;
	}
	
	public List<Ingerido> getIngeridos() {
		return ingeridos;
	}
	
	public void agregarIngerido(Ingerido ingerido) {
		this.ingeridos.add(ingerido);
		ingerido.setComidaDieta(this);
	}
	
	public Integer calcularCaloriasIngeridas() {
		
		Integer totalCalorias = 0;
		
		for (Ingerido ingerido : getIngeridos()) {
			if ( (ingerido.getConsumido() != null && ingerido.getConsumido()) && ingerido.getCantPorcionesIngeridas() > 0) {
				totalCalorias += ingerido.calcularCalorias();
			}
		}
		
		return totalCalorias;
	}
	
	public Integer calcularCaloriasSugeridas() {
		
		Integer totalCalorias = 0;
		
		for (Ingerido ingerido : getIngeridos()) {
			if (ingerido.getCantPorcionesSugeridas() > 0) {
				totalCalorias += ingerido.calcularCalorias();
			}
		}
		
		return totalCalorias;
	}
	
	@Override
	public boolean equals(Object object) {
		
		return (object instanceof ComidaDieta) ? this.tipo.equals(((ComidaDieta) object).getTipo()) : super.equals(object);
		// perdon por el instance of, pero play me mandaba un objeto del tipo PorcionPlan en el equals y pinchaba!!! HORRIBLE! Gus.
	}
	
}
